import { reactive } from "vue";
import type { FormRules } from "element-plus";
import { isPhone, isEmail as _isEmail } from "@pureadmin/utils";
import { http } from "@/utils/http";
import { changeHttpLink } from "@/utils/test";
/** 自定义表单规则校验 */
// 添加一个变量来存储表单的原始名称
let originalFormName = "";
// 导出一个函数来设置原始名称
export function setOriginalFormName(name: string) {
  originalFormName = name;
}
/** 密码正则（密码格式应为8-18位数字、字母、符号的任意两种组合） */
export const REGEXP_PWD =
  /^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)]|[()])+$)(?!^.*[\u4E00-\u9FA5].*$)([^(0-9a-zA-Z)]|[()]|[a-z]|[A-Z]|[0-9]){8,18}$/;
export const formRules = reactive(<FormRules>{
  name: [
    { required: true, message: "名称为必填项", trigger: "blur" },
    {
      validator: async (rule, value, callback) => {
        if (!value) {
          callback();
          return;
        }
        // 如果原始名称存在且与当前值相同，则不进行唯一性验证
        if (originalFormName && value === originalFormName) {
          callback();
          return;
        }
        try {
          // 发送请求检查名称是否存在
          const res = await http.get(changeHttpLink("/api/Dealer"), {
            params: {
              Name: value,
              PageIndex: 1,
              PageSize: 1000 // 检查前1000条记录
            }
          });
          // 添加类型断言以解决TypeScript类型检查问题
          const typedRes = res as {
            Success: boolean;
            Data?: { Items: Array<{ Name: string }> };
          };
          if (
            typedRes.Success &&
            typedRes.Data.Items.some(item => item.Name === value)
          ) {
            callback(new Error("经销商名称已存在"));
          } else {
            callback();
          }
        } catch (error) {
          console.error(error);
          callback(new Error("验证名称失败，请重试"));
        }
      },
      trigger: "blur"
    }
  ],
  Tel: [
    { required: true, message: "手机号为必填项", trigger: "blur" },
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback();
        } else if (!isPhone(value)) {
          callback(new Error("请输入正确的手机号码格式"));
        } else {
          callback();
        }
      },
      trigger: "blur"
      // trigger: "click" // 如果想在点击确定按钮时触发这个校验，trigger 设置成 click 即可
    }
  ],
  loginPwd: [
    {
      validator: (rule, value, callback) => {
        if (value === "") {
          callback(new Error("请输入密码"));
        } else if (!REGEXP_PWD.test(value)) {
          callback();
          // callback(
          //   new Error("密码格式应为8-18位数字、字母、符号的任意两种组合")
          // );
        } else {
          callback();
        }
      },
      trigger: "blur"
    }
  ]
});
